home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Inside!
/
Amiga FD Inside (1995)(Ultramax).iso
/
forumamiga
/
ausgabe09
/
texte
/
basic-kurs.9-ii
< prev
next >
Wrap
Text File
|
1992-09-15
|
6KB
|
148 lines
B A S I C - E c k e i m F O R U M A M I G A - Teil: 9-II
===========================================================================
Willkommen zum ersten "richtigen" Teil des BASIC-Kurses.
Voraussetzungen hierfür sind "AmigaBASIC" und "Cursor V1.6". Damit ist es
möglich, geschriebene Programme auch gleich zu kompilieren.
Das erste Thema, über das ich heute schreiben möchte, ist die Programmsteu-
erung per Maus.
Um es gleich grundsätzlich vorweg zu sagen, der Pfeil -> leitet ein Listing
ein und der Pfeil <- zeigt an, daß es im Text weitergeht. Natürlich darf der
Pfeil nicht mit abgetippt werden... :-)
Angenommen, Sie wollen eine Auswahl von 10 rechteckigen Gadgets überwachen,
deren Bereiche beliebig sind, allerdings sich nicht überlappen dürfen.
Hierzu sollten Sie zuerst einmal die Gadgets definieren:
->
Definition:
DIM a(3,10)
<-
Sie erhalten dabei eine 2-dimensionale Feldvariable a(i,j), wobei i für 0 die
x-Koordinate und für 1 die y-Koordinate der Gadgetecke oben links des Gadgets
Nr. j bezeichnet. Nimmt i den Wert 2 oder 3 an, gilt dasselbe wie oben, nur
diesmal für die Gadgetecke unten rechts. - Soweit klar? - Ok, dann kann´s ja
weitergehen.
Nun sollte man die Werte jedes einzelnen Gadgets festlegen. Bei meinem Bei-
spiel gehe ich jetzt mal von 10 regelmäßig auf dem Bildschirm verteilten Gad-
gets aus, die jeweils 90 Pixel breit und 50 Pixel hoch sind. Zwischen allen
Gadgets ist 10 Pixel Freiraum, außerdem sind die Gadgets 5 Pixel vom linken
(folglich auch 145 Pixel vom rechten) und 15 Pixel vom oberen (folglich 75
(NTSC)/131 (PAL) Pixel vom unteren) Rand entfernt. Dieser Platz kann im spä-
teren Programm für eventuelle Text-/Grafik-/sonstige Ausgaben benutzt werden.
Hierzu also ein Programmbeispiel:
->
GadgetsWerte:
FOR j=1 TO 5
a(0,j)=5+(j-1)*100
a(1,j)=15
a(2,j)=95+(i-1)*100
a(3,j)=65
NEXT
FOR j=6 TO 10
a(0,j)=5+(j-1)*100
a(1,j)=75
a(2,j)=95+(i-1)*100
a(3,j)=125
NEXT
<-
Um die Gadgets auf den Bildschirm zu bringen, könnte man so vorgehen:
->
PrintGadgets:
FOR j=1 to 10
LINE (a(0,j),a(1,j))-(a(2,j),a(3,j)),b
NEXT
<-
Hiermit werden alle 10 Gadgets auf den Bildschirm gebracht, allerdings nur
die Rahmen. Sollten Sie die Gadgets gefüllt haben wollen, müssen Sie am Ende
der LINE-Zeile noch ein F anfügen (also ...,bf).
So, die Gadgets wären auf dem Bildschirm zu sehen. Aber wie bringe ich meinen
Compi dazu, auf das Mausklicken auf die Gadgets richtig zu reagieren?
Ganz einfach: Wir bedienen uns der MOUSE-Funktion:
->
AuswahlCheck:
WHILE MOUSE(0)=0:WEND ' wartet auf den Druck der linken Maustaste
x=MOUSE(3) ' liefert den x-Wert
y=MOUSE(4) ' liefert den y-Wert
<-
Man hat jetzt die x- und y-Position des Mausklicks. Es gilt nun nur noch zu
prüfen, auf welches Gadget geklickt wurde:
->
CheckGadget:
IF y<65 AND y>15 THEN row=1 ' falls ja, dann 1. Gadgetreihe
IF y<125 AND y>75 THEN row=2 ' falls ja, dann 2. Gadgetreihe
IF x>5 AND x<95 THEN gad=1 ' Gadget 1
IF x>105 AND x<195 THEN gad=2 ' Gadget 2
IF x>205 AND x<295 THEN gad=3 ' Gadget 3
IF x>305 AND x<395 THEN gad=4 ' Gadget 4
IF x>405 AND x<495 THEN gad=5 ' Gadget 5
IF row=2 THEN gad=gad+5 ' Gadget 6-10 (folgt aus 2. Gadgetr.)
IF gad=0 THEN GOTO AuswahlGadget ' falls Klick nicht auf Gadget,nochmal
<-
Nun kann man die Eingaben verarbeiten, indem man "IF gad=x THEN ..." benutzt.
Das wär´s dann auch eigentlich schon. Aber in den meisten Programmen genügt
das nicht. Denn was tun, wenn Funktionen sowohl über Tastatur als auch per
Maus aufrufbar sein sollen?
Ganz einfach, es muß nur das Unterprogramm "AuswahlCheck" durch das unten
stehende "TastOderMaus" ersetzt werden.
->
TastOderMaus:
s$="":t=0
WHILE s$="" AND t=0
s$=INKEY$
t=MOUSE(0)
WEND
IF s$<>"" THEN GOTO TastDruck
x=MOUSE(3)
y=MOUSE(4)
<-
Falls eine Taste gedrückt wurde, wird nach TastDruck verzweigt, wo man pro-
blemlos die Eingaben verarbeiten kann. Wurde die Maustaste gedrückt, fährt
das Programm einfach fort (es sollte anschließend die Routine "CheckGadget"
folgen).
Es gibt noch eine weitere Möglichkeit, den Druck auf die linke Maustaste "ab-
zufangen". Dazu muß am Programmstart "ON MOUSE GOSUB xxx" stehen. Sobald
dann die Maustastenabfrage beginnen sollte, muß ein "MOUSE ON" folgen. Wenn
die Mausabfrage beendigt sein soll, muß ein "MOUSE OFF" angegeben werden.
Es muß natürlich irgendwo ein Unterprogramm namens "xxx" stehen. Das könnte
z.B. so aussehen:
->
xxx:
t=MOUSE(0)
x=MOUSE(3)
x=MOUSE(4)
<-
Anschließend muß wieder "CheckGadget" benutzt werden.
Diese Art der Programmierung ist besonders dann nützlich, wenn man zusätzlich
auch noch mit Menüs arbeitet - allerdings werde ich auf die Menüprogrammie-
rung erst in einem späteren Kursteil eingehen.
Und dann wären wir auch schon am Ende dieses Kursteils angelangt. - Ich hof-
fe, er war fehlerfrei und hat Ihnen ein paar neue Erkenntnisse gebracht.
Bis dann in der nächsten FORUM AMIGA-Ausgabe,
Stefan Grad.
P.S.: Natürlich dürfen alle Routinen in eigene Programme eingebaut werden,
ein Hinweis auf die Quelle sollte aber dabei sein (z.B. in der Anlei-
tung erwähnen: einige Routinen stammen aus dem Forum-Amiga-Basic-Kurs
von Stefan Grad). Auch ein Exemplar des Programmes für meine FD-Serie
"GPD" wäre ganz nett...
© 9/1992 by Stefan Grad. Dieser Bericht ist exklusiv für das FORUM AMIGA.
Andersweitige Verbreitung erst nach meiner schriftlichen Genehmigung !!!